NO_COLOR=\x1b[0m
OK_COLOR=\x1b[32;01m
RED_COLOR=\x1b[31;01m
OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)

CXX = g++
CXXFLAGS += -Wall -O2 -Wextra
AR = ar
LDFLAGS += -lpthread
LIBRARY = connect_utility.o \
	eccezioni.o \
	lettori_scrittori.o \
	libreria.o \
	Service_1.o \
	client_fun.o \
	Service_2.o 

BIN =  reg_server \
        client \
        server \
        server2 \
        client_test


all:	
	@echo "-> Compiling external libraries... "
	@$(MAKE) $(LIBRARY)
	@echo -e "$(RED_COLOR)"Externel Library compiled successfully "$(NO_COLOR)"
	@echo "-> Compiling binary... "
	@$(MAKE) $(BIN)
	@echo -e "$(RED_COLOR)"Binary compiled successfully "$(NO_COLOR)"


connect_utility.o :
	@echo -n Compiling connect_utility.cpp... 
	@$(CXX) -c $(CXXFLAGS) connect_utility.cpp
	@echo -e "$(OK_STRING)"

eccezioni.o : 
	@echo -n Compiling eccezioni.cpp...
	@$(CXX) -c $(CXXFLAGS) eccezioni.cpp
	@echo -e "$(OK_STRING)"

lettori_scrittori.o :
	@echo -n Compiling lettori_scrittori.cpp...
	@$(CXX) -c $(CXXFLAGS) lettori_scrittori.cpp 
	@echo -e "$(OK_STRING)"
libreria.o :
	@echo -n Compiling libreria.cpp...
	@$(CXX) -c $(CXXFLAGS) -D REGISTRO -D CLIENT libreria.cpp
	@echo -e "$(OK_STRING)"

Service_1.o  :
	@echo -n Compiling Service_1.cpp...
	@$(CXX) -c $(CXXFLAGS) -D SERVER `Magick++-config --cxxflags --cppflags --ldflags --libs`  Service_1.cpp  
	@echo -e "$(OK_STRING)"

client_fun.o :
	@echo -n Compiling client_fun.cpp...
	@$(CXX) -c $(CXXFLAGS) -D CLIENT client_fun.cpp 
	@echo -e "$(OK_STRING)"

Service_2.o  :
	@echo -n Compiling Service_2.cpp...
	@$(CXX) -c $(CXXFLAGS) -D SERVER  Service_2.cpp
	@echo -e "$(OK_STRING)"


reg_server : connect_utility.o libreria.o eccezioni.o lettori_scrittori.o
	@echo -n Compiling reg_server.cpp...
	@$(CXX) $(CXXFLAGS) $(LDFLAGS) connect_utility.o libreria.o eccezioni.o lettori_scrittori.o -D REGISTRO  reg_server.cpp -o reg_server 
	@echo -e "$(OK_STRING)"

client : connect_utility.o libreria.o eccezioni.o lettori_scrittori.o client_fun.o
	@echo -n Compiling client.cpp...
	@$(CXX) $(CXXFLAGS) $(LDFLAGS) connect_utility.o libreria.o eccezioni.o lettori_scrittori.o client_fun.o -D CLIENT client.cpp -o client
	@echo -e "$(OK_STRING)"

server : Service_1.o connect_utility.o eccezioni.o lettori_scrittori.o libreria.cpp
	@echo -n Compiling server.cpp...
	@$(CXX) $(CXXFLAGS) $(LDFLAGS) Service_1.o connect_utility.o eccezioni.o lettori_scrittori.o libreria.cpp `Magick++-config --cxxflags --cppflags --ldflags --libs` -D SERVER server.cpp -o server
	@echo -e "$(OK_STRING)"

server2 : Service_2.o connect_utility.o eccezioni.o lettori_scrittori.o libreria.cpp
	@echo -n Compiling server2.cpp...
	@$(CXX) $(CXXFLAGS) $(LDFLAGS) Service_2.o connect_utility.o eccezioni.o lettori_scrittori.o -D SERVER libreria.cpp server2.cpp -o server2
	@echo -e "$(OK_STRING)"

client_test :  connect_utility.o libreria.o eccezioni.o lettori_scrittori.o client_fun.o
	@echo -n Compiling client_test.cpp...
	@$(CXX) $(CXXFLAGS) $(LDFLAGS)  connect_utility.o libreria.o eccezioni.o lettori_scrittori.o client_fun.o -D CLIENT client_test.cpp -o client_test
	@echo -e "$(OK_STRING)"


clean:
	rm -f $(LIBRARY) $(BIN) Makefile
